#ifndef _MODULE_H_
#define _MODULE_H_

#include "os.h"

#define fd2mod(fd)  ((Module *)fd)
#define mod2fd(mod) ((int)mod)

/**
 *
 *根据消息号分发到不同的模块进行处理
 *功能: 1.支持C模块, LUA模块
 *      2.模块的动态加载,卸载
 *      3.消息事件, 定时事件
 *      4.模块的远程控制(查看,加载,卸载)
**/

#define MODULE_TYPE_LUA 1
#define MODULE_TYPE_CPP 2


struct Module
{
    char mod_dir[128];
    
    struct Module *next_mod;    
};
typedef struct Module Module;


#define HANDLER_LUA_TIMER 1
#define HANDLER_LUA_MSG   2
#define HANDLER_CPP_TIMER 3
#define HANDLER_CPP_MSG   4

typedef struct Handler
{
    int hand_type; //处理函数的类型 
    int msgid;
    char hand_data[0];
}Handler;

#define handler2msgid(h)  (h->msgid)

/*************处理器结构**************************************/
typedef struct Handler_CPP_Msg
{
}Handler_CPP_Msg;

typedef struct Handler_CPP_Timer
{
}Handler_CPP_Timer;

typedef struct Handler_LUA_Msg
{
    char callback[64];
}Handler_LUA_Msg;

typedef struct Handler_LUA_Timer
{
    struct event evt;
    struct timeval tv;
    char callback[64];
}Handler_LUA_Timer;


int mod_init();



int mod_mgr_load_modules(const char *dirpath);
#endif
